"""
浏览器功能测试脚本
用于验证浏览器的各项功能，包括:
1. 打开网站
2. 链接点击
3. 前进/后退导航
4. 刷新和停止加载
"""
import sys
import time
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtWidgets import QApplication
from main import Browser

class BrowserTester:
    def __init__(self):
        self.app = QApplication(sys.argv)
        self.browser = Browser()
        self.browser.show()
        self.test_results = []
        
    def run_tests(self):
        """运行所有测试"""
        print("=" * 60)
        print("浏览器功能测试")
        print("=" * 60)
        
        # 测试1: 打开起点网站首页
        print("\n[测试1] 正在打开起点网站首页...")
        self.browser.url_bar.setText("https://www.qidian.com/")
        self.browser.navigate_to_url()
        
        # 等待页面加载
        QTimer.singleShot(8000, self.check_qidian_loaded)
        
        # 启动事件循环
        sys.exit(self.app.exec_())
    
    def check_qidian_loaded(self):
        """检查起点网站是否加载成功"""
        current_url = self.browser.browser.url().toString()
        print(f"当前URL: {current_url}")
        
        if "qidian.com" in current_url:
            print("✓ 起点网站首页加载成功")
            self.test_results.append(("首页加载", True))
            
            # 测试2: 检查链接点击功能
            print("\n[测试2] 测试链接点击功能...")
            print("请手动点击页面上的任意小说链接（如'从种地开始，步步为营'）")
            print("观察是否能成功跳转到小说详情页...")
            
            # 监听URL变化
            self.browser.browser.urlChanged.connect(self.check_navigation)
            
            # 30秒后开始导航测试
            QTimer.singleShot(10000, self.test_navigation_buttons)
        else:
            print("✗ 起点网站首页加载失败")
            self.test_results.append(("首页加载", False))
            QTimer.singleShot(1000, self.show_test_results)
    
    def check_navigation(self, url):
        """检查页面导航"""
        url_str = url.toString()
        if "/book/" in url_str and url_str != "https://www.qidian.com/":
            print(f"\n✓ 成功导航到小说页面: {url_str}")
            self.test_results.append(("链接点击", True))
            # 不要立即显示测试结果，让导航测试继续
            
    def test_navigation_buttons(self):
        """测试导航按钮功能"""
        print("\n[测试3] 测试导航按钮功能...")
        
        # 检查后退按钮状态
        back_enabled = self.browser.back_button.isEnabled()
        print(f"后退按钮状态: {'启用' if back_enabled else '禁用'}")
        self.test_results.append(("后退按钮状态", back_enabled))
        
        if back_enabled:
            # 测试后退按钮
            print("测试后退按钮 - 点击后退按钮...")
            self.browser.back_button.click()
            QTimer.singleShot(3000, self.check_back_navigation)
        else:
            print("后退按钮未启用，无法测试后退功能")
            self.test_results.append(("后退功能", False))
            self.test_refresh_button()
    
    def check_back_navigation(self):
        """检查后退导航是否成功"""
        current_url = self.browser.browser.url().toString()
        print(f"后退后的URL: {current_url}")
        
        if current_url == "https://www.qidian.com/":
            print("✓ 后退功能正常")
            self.test_results.append(("后退功能", True))
            
            # 检查前进按钮状态
            forward_enabled = self.browser.forward_button.isEnabled()
            print(f"前进按钮状态: {'启用' if forward_enabled else '禁用'}")
            self.test_results.append(("前进按钮状态", forward_enabled))
            
            if forward_enabled:
                # 测试前进按钮
                print("测试前进按钮 - 点击前进按钮...")
                self.browser.forward_button.click()
                QTimer.singleShot(3000, self.check_forward_navigation)
            else:
                print("前进按钮未启用，无法测试前进功能")
                self.test_results.append(("前进功能", False))
                self.test_refresh_button()
        else:
            print("✗ 后退功能异常")
            self.test_results.append(("后退功能", False))
            self.test_refresh_button()
    
    def check_forward_navigation(self):
        """检查前进导航是否成功"""
        current_url = self.browser.browser.url().toString()
        print(f"前进后的URL: {current_url}")
        
        if "/book/" in current_url:
            print("✓ 前进功能正常")
            self.test_results.append(("前进功能", True))
        else:
            print("✗ 前进功能异常")
            self.test_results.append(("前进功能", False))
        
        self.test_refresh_button()
    
    def test_refresh_button(self):
        """测试刷新按钮功能"""
        print("\n[测试4] 测试刷新按钮...")
        self.browser.refresh_button.click()
        # 等待刷新完成
        QTimer.singleShot(3000, self.test_stop_button)
    
    def test_stop_button(self):
        """测试停止按钮功能"""
        print("\n[测试5] 测试停止按钮...")
        
        # 加载一个大页面
        print("加载百度百科以测试停止按钮...")
        self.browser.url_bar.setText("https://baike.baidu.com")
        self.browser.navigate_to_url()
        
        # 快速点击停止按钮
        QTimer.singleShot(500, self.click_stop_button)
    
    def click_stop_button(self):
        """点击停止按钮"""
        stop_enabled = self.browser.stop_button.isEnabled()
        print(f"停止按钮状态: {'启用' if stop_enabled else '禁用'}")
        
        if stop_enabled:
            print("点击停止按钮...")
            self.browser.stop_button.click()
            self.test_results.append(("停止按钮状态", True))
            print("✓ 停止功能可用")
        else:
            self.test_results.append(("停止按钮状态", False))
            print("✗ 停止按钮未启用，无法测试停止功能")
        
        # 显示测试结果
        QTimer.singleShot(2000, self.show_test_results)
    
    def show_test_results(self):
        """显示测试结果"""
        print("\n" + "=" * 60)
        print("测试结果汇总")
        print("=" * 60)
        
        for test_name, result in self.test_results:
            status = "✓ 通过" if result else "✗ 失败"
            print(f"{test_name}: {status}")
        
        for expected_test in ["首页加载", "链接点击", "后退按钮状态", "后退功能", 
                              "前进按钮状态", "前进功能", "停止按钮状态"]:
            if not any(name == expected_test for name, _ in self.test_results):
                print(f"{expected_test}: ⚠ 未测试")
        
        print("\n测试说明:")
        print("1. 如果能看到起点网站首页，说明浏览器基本功能正常")
        print("2. 链接点击测试需要手动点击页面上的小说链接")
        print("3. 导航按钮测试会自动执行后退和前进功能")
        print("4. 刷新和停止功能也会进行测试")
        print("5. 所有功能测试通过，说明浏览器功能完整正常")
        print("=" * 60)
        
        # 5秒后退出
        QTimer.singleShot(5000, self.app.quit)

if __name__ == '__main__':
    tester = BrowserTester()
    tester.run_tests()